Ext.onReady(function ()
{
	//获得数据store
	var courseData = Ext.create('Ext.data.Store',
		{
			model : 'CourseModel',
			proxy :
			{
				type : 'ajax',
				url : basePath + 'course/getAllVirtualCourse',
				reader :
				{
					type : 'json',
					root : 'root'
				}
			},
			autoLoad : true
		}
		);

	//数据填充入combobox
	var courseBox = Ext.create('Ext.form.ComboBox',
		{
			fieldLabel : '虚拟实验:',
			emptyText : '请选择',
			labelWidth : 100,
			width : 400,
			labelAlign : "right",
			store : courseData,
			queryMode : 'local',
			editable : false,
			displayField : 'name',
			valueField : 'course_id',
			blankText : '不能为空',
			allowBlank : false,
			listeners :
			{
				'select' : function ()
				{
					loadAppointmentGrid(termBox.getValue(), weekBox.getValue(), courseBox.getValue()); //获取id对应学年
				}
			}
		}
		);

	//获得数据store
	var termData = Ext.create('Ext.data.Store',
		{
			model : 'TermModel',
			proxy :
			{
				type : 'ajax',
				url : basePath + 'term/GetTermList',
				reader :
				{
					type : 'json',
					root : 'root'
				}
			},
			autoLoad : true
		}
		);
	//数据填充入combobox

	//学期combobox
	var termBox = Ext.create('Ext.form.ComboBox',
		{
			fieldLabel : '学年:',
			emptyText : '请选择',
			labelWidth : 100,
			width : 400,
			labelAlign : "right",
			store : termData,
			queryMode : 'local',
			editable : false,
			disable : true,
			displayField : 'name',
			valueField : 'term_id',
			blankText : '不能为空',
			allowBlank : false,
			listeners :
			{
				'select' : function ()
				{
					loadWeek(termBox.getValue());
				}
			}
		}
		);

	//获得数据store
	function loadWeek(tid)
	{
		//重新获得一个store，这样比较麻烦，但是很管用
		weekBox.store.removeAll();
		weekData = Ext.create('Ext.data.Store',
			{
				model : 'WeekModel',
				proxy :
				{
					type : 'ajax',
					url : basePath + 'term/getWeekList?tid=' + tid,
					reader :
					{
						type : 'json',
						root : 'root'
					}
				},
				autoLoad : true
			}
			);
		//bindStore被标记为不安全的用法，但是能有效解决不能显示重新绑定的store的问题
		weekBox.bindStore(weekData);
		weekBox.clearValue();
	}

	var weekData = Ext.create('Ext.data.Store',
		{
			model : 'WeekModel',
			proxy :
			{
				type : 'ajax',
				url : basePath + 'term/getWeekList?tid=0',
				reader :
				{
					type : 'json',
					root : 'root'
				}
			},
			autoLoad : true
		}
		);
	//数据填充入combobox
	var weekBox = Ext.create('Ext.form.ComboBox',
		{
			fieldLabel : '周次:',
			emptyText : '请选择',
			labelWidth : 100,
			width : 400,
			labelAlign : "right",
			store : weekData,
			queryMode : 'local',
			editable : false,
			displayField : 'week_describe',
			valueField : 'week_id',
			blankText : '不能为空',
			allowBlank : false,
			listeners :
			{
				'select' : function ()
				{
					loadAppointmentGrid(termBox.getValue(), weekBox.getValue(), courseBox.getValue()); //获取id对应学年
				}
			}
		}
		);

	Ext.QuickTips.init();

	//创建表格,可以加入更多的属性。
	var tmp = Ext.getCmp('showAppointmentGrid');
	if (tmp != null)
		tmp.destroy();
	var showAppointmentGrid = Ext.create("Ext.grid.Panel",
		{
			title : '【点击相应位置可以进行预约】',
			id : 'showAppointmentGrid',
			name : 'showAppointmentGrid',
			sortable : false,
			stripeRows : true,
			enableHdMenu : false,
			enableColumnHide : false,
			selType : 'cellmodel',
			loadMask : true,
			columnLines : true,
			columns : [], //注意此行代码，至关重要
			displayInfo : true,
			emptyMsg : "没有数据显示",
			viewConfig :
			{
				forceFit : true
			},
			listeners :
			{
				'select' : function (selModel, record, row, column, eOpts)
				{
					if (column < 2)
						return;

					var appointmentInfoText = new Ext.panel.Panel(
						{
							frame : false,
							title : '',
							html : ''
						}
						);

					var addNewAppointBox = Ext.create("Ext.form.FormPanel",
						{
							frame : false,
							bodyPadding : 10,
							defaultType : 'textfield',
							defaults :
							{
								anchor : '100%',
								labelWidth : 50,
								labelAlign : "right"
							},
							items : [
								appointmentInfoText
							],
							buttons : [
								{
									text : '确定预约',
									handler : function ()
									{
										if (addNewAppointBox.getForm().isValid())
										{
											addNewAppointBox.getForm().submit(
											{
												url : basePath + 'appointment/addNewAppointment?tid=' + termBox.getValue() + '&wid=' + weekBox.getValue() + '&rid=' + showAppointmentGrid.getView().getHeaderCt().getHeaderAtIndex(column).dataIndex + '&period=' + row,
												method : 'POST',
												waitMsg : '正在预约，请稍候...',
												waitTitle : '预约中',
												timeout : 300000,
												success : function (addNewAppointBox, action)
												{
													var isSuc = action.result.success;
													if (isSuc)
													{
														Ext.Msg.alert('预约成功！', '已经完成预约 ！');
														loadAppointmentGrid(termBox.getValue(), weekBox.getValue(), courseBox.getValue());
													}
												},
												failure : function (addNewAppointBox, action)
												{
													var res = action.result.res;
													Ext.Msg.alert('预约失败', res);
												}
											}
											);
											addWindow.close();
										}
									}
								},
								{
									text : '取消预约',
									handler : function ()
									{
										Ext.Ajax.request(
										{
											url : basePath + 'appointment/deleteAppointment?tid=' + termBox.getValue() + '&wid=' + weekBox.getValue() + '&rid=' + showAppointmentGrid.getView().getHeaderCt().getHeaderAtIndex(column).dataIndex + '&period=' + row,
											method : 'POST',
											waitMsg : '正在取消，请稍候...',
											waitTitle : '取消中',
											timeout : 300000,
											success : function (response)
											{
												var res = Ext.JSON.decode(response.responseText);
												if (res.success)
												{
													Ext.Msg.alert('取消成功！', '已经完成取消，可以重新在此处添加预约！');
													loadAppointmentGrid(termBox.getValue(), weekBox.getValue(), courseBox.getValue());
												}
											},
											failure : function (response)
											{
												Ext.Msg.alert('错误', '取消失败');
											}
										}
										);
										addWindow.close();
									}
								}
							]
						}
						);

					var addWindow = Ext.create('Ext.window.Window',
						{
							title : '预约',
							height : 350,
							width : 400,
							layout : 'fit',
							modal : true,
							closeAction : 'hide',
							items : [addNewAppointBox]
						}
						);
					Ext.Ajax.request(
					{
						url : basePath + 'appointment/hasAppointmentAccess?tid=' + termBox.getValue() + '&wid=' + weekBox.getValue() + '&rid=' + showAppointmentGrid.getView().getHeaderCt().getHeaderAtIndex(column).dataIndex + '&period=' + row,
						method : 'POST',
						success : function (response)
						{
							var json = Ext.JSON.decode(response.responseText);
							if (json.success)
							{
								appointmentInfoText.setTitle(json.title);
								appointmentInfoText.html = json.res;

								addWindow.show();
							}
							else
							{
								return;
							}
						}
					}
					)
				}
			}
		}
		);

	//显示主窗体
	tmp = Ext.getCmp('ShowAppointmentPanel');
	if (tmp != null)
		tmp.destroy();
	var ShowAppointmentPanel = Ext.create("Ext.form.FormPanel",
		{
			title : '预约表',
			frame : false,
			defaultType : 'textfield',
			renderTo : 'showVirtualRoomAppointmentDiv',
			defaults :
			{
				labelWidth : 100,
				labelAlign : "right"
			},
			items : [
				courseBox,
				termBox,
				weekBox,
				showAppointmentGrid
			],
			tbar : [
				{
					xtype : 'button',
					text : '实验室对应虚拟实验列表',
					handler : function ()
					{
						Ext.Ajax.request(
						{
							url : basePath + 'room/GetCourseRoomList',
							method : 'POST',
							success : function (response)
							{
								var showCourseRoomPanel = new Ext.panel.Panel(
									{
										frame : false,
										html : '',
										bodyPadding : 10,
										defaultType : 'textfield',
										autoScroll : true
									}
									);
								var CourseRoomWindow = Ext.create('Ext.window.Window',
									{
										title : '实验室对应虚拟实验一览',
										height : 400,
										width : 600,
										layout : 'fit',
										modal : true,
										closeAction : 'hide',
										items : [showCourseRoomPanel]
									}
									);
								var json = Ext.JSON.decode(response.responseText);
								showCourseRoomPanel.html = json.res;
								CourseRoomWindow.show();
							}
						}
						);
					}
				}
			]
		}
		);

	//通过ajax获取表头、表格数据
	function loadAppointmentGrid(tid, wid, cid)
	{
		if (tid==null||wid==null||cid==null)
			return;
		Ext.Ajax.request(
		{
			url : basePath + 'appointment/GetVirtualRoomAppointmentGrid?term_id=' + tid + '&week_id=' + wid + '&course_id=' + cid,
			method : 'POST',
			success : function (response)
			{
				var json = Ext.JSON.decode(response.responseText);
				var store = Ext.create('Ext.data.Store',
					{
						fields : json.fields,
						data : json.data
					}
					);

				Ext.getCmp('showAppointmentGrid').reconfigure(store, json.columns);
				//Ext.getCmp('showAppointmentGrid').render();
			}
		}
		);
	}
}
);
